//详细版
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* decrypt(int* code, int codeSize, int k, int* returnSize) {
    int sum = 0, n = 0;
    int *p = (int*)malloc(sizeof(int) * codeSize);
    *returnSize = codeSize;

    if(k >0){
        for(int i = 0; i < codeSize + abs(k) - 1; i++){
            sum += code[i % codeSize];
            if(i < k - 1)
                continue;
            p[(codeSize + i - k) % codeSize] = sum;
            sum -= code[i - k + 1];
        }
    }
    else if(k < 0){
        for(int i = 0; i < codeSize + abs(k) - 1; i++){
            sum += code[i % codeSize];
            if(i < -k - 1)
                continue;
            p[(i + 1) % codeSize] = sum;
            sum -= code[i + k + 1];
        }
    }
    else{
        for(int i = 0; i < codeSize; i++)
            p[i] = 0;
    }
    return p;
}

//简略版
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* decrypt(int* code, int codeSize, int k, int* returnSize) {
    int sum = 0, n = 0;
    int *p = (int*)malloc(sizeof(int) * codeSize);
    memset(p, 0, codeSize * 4);
    *returnSize = codeSize;
    if(k == 0)
        return p;
    for(int i = 0; i < codeSize + abs(k) - 1; i++){
        sum += code[i % codeSize];
        if(i < abs(k) - 1)
            continue;
        if(k > 0)
            p[(codeSize + i - k) % codeSize] = sum;
        else
            p[(i + 1) % codeSize] = sum;

        sum -= code[i - abs(k) + 1];
    }
    return p;
}
/*你有一个炸弹需要拆除，时间紧迫！你的情报员会给你一个长度为 n 的循环数组 code 以及一个密钥 k 。

为了获得正确的密码，你需要替换掉每一个数字。所有数字会同时被替换。

如果 k > 0 ，将第 i 个数字用 接下来 k 个数字之和替换。

如果 k < 0 ，将第 i 个数字用 之前 k 个数字之和替换。

如果 k == 0 ，将第 i 个数字用 0 替换。

由于 code 是循环的， code[n-1] 下一个元素是 code[0]，且 code[0] 前一个元素是 code[n-1] 。

给你循环数组 code 和整数密钥 k ，请你返回解密后的结果来拆除炸弹！*/